home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / usb / otg.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.2 KB  |  136 lines

  1. /* USB OTG (On The Go) defines */
  2. /*
  3.  *
  4.  * These APIs may be used between USB controllers.  USB device drivers
  5.  * (for either host or peripheral roles) don't use these calls; they
  6.  * continue to use just usb_device and usb_gadget.
  7.  */
  8.  
  9. #ifndef __LINUX_USB_OTG_H
  10. #define __LINUX_USB_OTG_H
  11.  
  12. /* OTG defines lots of enumeration states before device reset */
  13. enum usb_otg_state {
  14.     OTG_STATE_UNDEFINED = 0,
  15.  
  16.     /* single-role peripheral, and dual-role default-b */
  17.     OTG_STATE_B_IDLE,
  18.     OTG_STATE_B_SRP_INIT,
  19.     OTG_STATE_B_PERIPHERAL,
  20.  
  21.     /* extra dual-role default-b states */
  22.     OTG_STATE_B_WAIT_ACON,
  23.     OTG_STATE_B_HOST,
  24.  
  25.     /* dual-role default-a */
  26.     OTG_STATE_A_IDLE,
  27.     OTG_STATE_A_WAIT_VRISE,
  28.     OTG_STATE_A_WAIT_BCON,
  29.     OTG_STATE_A_HOST,
  30.     OTG_STATE_A_SUSPEND,
  31.     OTG_STATE_A_PERIPHERAL,
  32.     OTG_STATE_A_WAIT_VFALL,
  33.     OTG_STATE_A_VBUS_ERR,
  34. };
  35.  
  36. /*
  37.  * the otg driver needs to interact with both device side and host side
  38.  * usb controllers.  it decides which controller is active at a given
  39.  * moment, using the transceiver, ID signal, HNP and sometimes static
  40.  * configuration information (including "board isn't wired for otg").
  41.  */
  42. struct otg_transceiver {
  43.     struct device        *dev;
  44.     const char        *label;
  45.  
  46.     u8            default_a;
  47.     enum usb_otg_state    state;
  48.  
  49.     struct usb_bus        *host;
  50.     struct usb_gadget    *gadget;
  51.  
  52.     /* to pass extra port status to the root hub */
  53.     u16            port_status;
  54.     u16            port_change;
  55.  
  56.     /* bind/unbind the host controller */
  57.     int    (*set_host)(struct otg_transceiver *otg,
  58.                 struct usb_bus *host);
  59.  
  60.     /* bind/unbind the peripheral controller */
  61.     int    (*set_peripheral)(struct otg_transceiver *otg,
  62.                 struct usb_gadget *gadget);
  63.  
  64.     /* effective for B devices, ignored for A-peripheral */
  65.     int    (*set_power)(struct otg_transceiver *otg,
  66.                 unsigned mA);
  67.  
  68.     /* for non-OTG B devices: set transceiver into suspend mode */
  69.     int    (*set_suspend)(struct otg_transceiver *otg,
  70.                 int suspend);
  71.  
  72.     /* for B devices only:  start session with A-Host */
  73.     int    (*start_srp)(struct otg_transceiver *otg);
  74.  
  75.     /* start or continue HNP role switch */
  76.     int    (*start_hnp)(struct otg_transceiver *otg);
  77.  
  78. };
  79.  
  80.  
  81. /* for board-specific init logic */
  82. extern int otg_set_transceiver(struct otg_transceiver *);
  83.  
  84.  
  85. /* for usb host and peripheral controller drivers */
  86. extern struct otg_transceiver *otg_get_transceiver(void);
  87.  
  88. static inline int
  89. otg_start_hnp(struct otg_transceiver *otg)
  90. {
  91.     return otg->start_hnp(otg);
  92. }
  93.  
  94.  
  95. /* for HCDs */
  96. static inline int
  97. otg_set_host(struct otg_transceiver *otg, struct usb_bus *host)
  98. {
  99.     return otg->set_host(otg, host);
  100. }
  101.  
  102.  
  103. /* for usb peripheral controller drivers */
  104. static inline int
  105. otg_set_peripheral(struct otg_transceiver *otg, struct usb_gadget *periph)
  106. {
  107.     return otg->set_peripheral(otg, periph);
  108. }
  109.  
  110. static inline int
  111. otg_set_power(struct otg_transceiver *otg, unsigned mA)
  112. {
  113.     return otg->set_power(otg, mA);
  114. }
  115.  
  116. static inline int
  117. otg_set_suspend(struct otg_transceiver *otg, int suspend)
  118. {
  119.     if (otg->set_suspend != NULL)
  120.         return otg->set_suspend(otg, suspend);
  121.     else
  122.         return 0;
  123. }
  124.  
  125. static inline int
  126. otg_start_srp(struct otg_transceiver *otg)
  127. {
  128.     return otg->start_srp(otg);
  129. }
  130.  
  131.  
  132. /* for OTG controller drivers (and maybe other stuff) */
  133. extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
  134.  
  135. #endif /* __LINUX_USB_OTG_H */
  136.